package nsu.edu.zsq.service.sys;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.github.pagehelper.PageInfo;

import nsu.edu.zsq.bean.ResitExam;
import nsu.edu.zsq.bean.ResitExamStudent;
import nsu.edu.zsq.bean.ResitExamTeacher;
import nsu.edu.zsq.bean.Student;
import nsu.edu.zsq.bean.Teacher;
import nsu.edu.zsq.param.PageQuery;

/** 
* Description: 补考信息管理的service类<br>
*/
public interface ResitExamService {

    /**
     * 获取一条补考信息
     * @param resitExamId 补考id
     * @return ResitExam
     */
    public ResitExam getResitExam(int resitExamId);
    
    /**
     * 获取补考课程列表
     * @param pageQuery 分页数据
     * @return PageInfo<ResitExam>
     */
    public PageInfo<ResitExam> listResitExamWithPage(PageQuery pageQuery);
    
    /**
     * 获取所有补考课程(带有专业代码),从stu_score表获取
     * @return List<HashMap<String, String>>
     */
    public List<HashMap<String, String>> listStuScore();
    
    /**
     * 保存一条课程信息到补考表
     * @param courseNos 课程代码数组
     * @param majorNos 专业代码数组
     */
    public void saveCourseToResitExam(String[] courseNos, String[] majorNos);
    
    /**
     * 删除补考表中的课程
     * @param resitExamIds 考试id数组
     */
    public void deleteCourseFromResitExam(int[] resitExamIds);
    
    /**
     * 更新一条补考信息
     * @param resitExam 考试信息
     */
    public void updateResitExam(ResitExam resitExam);
    
    /**
     * 获取一条考试信息,带有教室
     * @param resitExamId 考试id
     * @return Map<String, Object> key:resitExam roomNames 
     */
    public Map<String, Object> getResitExamWithRoom(int resitExamId);
    
    /**
     * 添加考试教室
     * @param resitExam
     */
    public void saveExamRoom(ResitExam resitExam);
    
    /**
     * 根据补考id删除考试教室
     * @param resitExamId 考试id
     * @param roomNames 教室名称数组
     */
    public void delExamRoom(int resitExamId, String[] roomNames);
    
    /**
     * 获取监考教师列表
     * @param resitExamTeacher 监考教师信息（resitExamId,roomName）
     * @return List<ResitExamTeacher>
     */
    public List<ResitExamTeacher> listResitExamTeacher(ResitExamTeacher resitExamTeacher);
    
    /**
     * 根据专业代码获取专业所在院系的所有教师信息
     * @param majorNo 专业代码
     * @param pageQuery 分页数据
     * @return PageInfo<Teacher>
     */
    public PageInfo<Teacher> listTeacherByMajorNoWithPage(String majorNo, PageQuery pageQuery);
    
    /**
     * 单个/批量添加监考教师
     * @param ResitExamTeacher 监考教师信息
     * @param teacherNos 教师编号数组
     */
    public void saveTeacherToResitExam(ResitExamTeacher resitExamTeacher, String[] teacherNos);
    
    /**
     * 单个/批量删除监考教师
     * @param resitExamTeacherIds 监考教师id数组
     */
    public void delResitExamTeacher(int[] resitExamTeacherIds);
    
    /**
     * 获取当前考场中的考试学生信息
     * @param resitExamStudent 考试学生信息
     * @return List<ExamStudent>
     */
    public List<ResitExamStudent> listResitExamStudent(ResitExamStudent resitExamStudent);
    
    /**
     * 根据课程代码获取课程下所有的需要补考的学生信息
     * @param courseNo 课程代码
     * @param pageQuery 分页信息
     * @return PageInfo<Student>
     */
    public PageInfo<Student> listStudentByCourseNoWithPage(String courseNo, PageQuery pageQuery);
    
    /**
     * 添加补考学生信息
     * @param resitExamStudent 补考学生信息
     * @param stuNos 学号数组
     */
    public void saveStudentToResitExam(ResitExamStudent resitExamStudent, String[] stuNos);
    
    /**
     * 单个/批量删除考试学生
     * @param resitExamStudentIds 补考学生id数组
     */
    public void delResitExamStudent(int[] resitExamStudentIds);
    
    /**
     * 考试学生的座位号自动排号
     * @param resitExamStudent 考试学生信息（resitExamId,roomName）
     */
    public void autoSeatNumber(ResitExamStudent resitExamStudent);

}
